/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.text.html.ImageView;

/**
 *
 * @author sebastian
 */
public class Tanque {
    
    private float nivelMaximo;
    private float nivelActual;
    private float temperatura;
    
    private int nivelX;
    private int nivelY;
    private int height;
    
    private JProgressBar medNivel;
    private JProgressBar medTemperatura;
    private JLabel valNivel;
    private JLabel valTemperatura;
    private ImageIcon imagenTanque; 
    private ImageIcon imagenLiquido; 
    
    private static final float calorEspecifico=2400; //J/kg

    public Tanque(float nivelMaximo, float temperatura, JProgressBar medTemperatura, 
            JProgressBar medNivel, JLabel valNivel, JLabel valTemperatura,int x, int y, int height) {
        
        this.nivelMaximo = nivelMaximo;
        this.nivelActual = 0;
        this.temperatura = temperatura;
        this.medNivel = medNivel;
        this.medTemperatura = medTemperatura;
        this.valNivel = valNivel;
        this.valTemperatura = valTemperatura;
        this.nivelX = x;
        this.nivelY = y;
        this.height = height;
        this.valTemperatura.setText(String.valueOf(this.temperatura)+" ºC");
        this.medTemperatura.setValue((int)this.temperatura);
        this.imagenTanque = new ImageIcon(getClass().getResource("../vista/imagenes/tanque.png"));
        this.imagenLiquido = new ImageIcon(getClass().getResource("../vista/imagenes/liquido.png"));
    }

    public float getNivelMaximo() {
        return nivelMaximo;
    }

    public void setNivelMaximo(float nivelMaximo) {
        this.nivelMaximo = nivelMaximo;
    }

    public float getNivelActual() {
        return nivelActual;
    }

    public void setNivelActual(float nivelActual) {
        this.nivelActual = nivelActual;
    }

    public float getTemperatura() {
        return temperatura;
    }

    public void setTemperatura(float temperatura) {
        this.temperatura = temperatura;
    
    }

    public int getNivelX() {
        return nivelX;
    }

    public void setNivelX(int nivelX) {
        this.nivelX = nivelX;
    }

    public int getNivelY() {
        return nivelY;
    }

    public void setNivelY(int nivelY) {
        this.nivelY = nivelY;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public ImageIcon getImagenTanque() {
        return imagenTanque;
    }

    public void setImagenTanque(ImageIcon imagenTanque) {
        this.imagenTanque = imagenTanque;
    }

    public ImageIcon getImagenLiquido() {
        return imagenLiquido;
    }

    public void setImagenLiquido(ImageIcon imagenLiquido) {
        this.imagenLiquido = imagenLiquido;
    }
    
    //Metodos de control:
    public void cambiarNivel(float aumento, int tipo){//tipo = 1 o -1
        this.nivelActual += (aumento * tipo);
        this.height = Math.abs((int)((this.nivelActual * 200)/this.nivelMaximo));
        this.medNivel.setValue((int)this.nivelActual);
        this.valNivel.setText(String.valueOf(this.nivelActual) + " Lts");
        
        this.medNivel.setStringPainted(true);
        this.medNivel.setForeground(Color.BLACK);
        
////        Recalcular temperatura:
        float nuevaTemp=0;
        if (tipo == 1) {
            nuevaTemp = (((this.nivelActual-aumento) * this.temperatura) + (aumento * 25))/(int)(this.nivelActual);
////            System.out.println("Aumento: "+aumento);
////            System.out.println("NivelActual: "+this.nivelActual);
////            System.out.println("Temperatura: "+this.temperatura);
////            System.out.println("Numerador:(nivelActual-aumento)+(aumento*): " + ((this.nivelActual-aumento) * this.temperatura));
////            
////            
////            
////            System.out.println("aumento a " + nuevaTemp);
            this.asignarTemperatura(nuevaTemp);
        }
//        else{
//            recalcularTemperatura(potenciaCaldera);
//        }
    }
    
    public synchronized void recalcularTemperatura(float potenciaCaldera){
        float peso = (float) (this.nivelActual * 0.8);
        float nuevaTemp = (potenciaCaldera/(peso * calorEspecifico))+this.temperatura;
        this.asignarTemperatura(nuevaTemp);
    }
    
    private synchronized void asignarTemperatura(float nueva){
        this.temperatura = nueva;
        //System.out.println("Temp class: "+this.temperatura);
        this.medTemperatura.setValue((int)this.temperatura);
        this.valTemperatura.setText(String.valueOf(this.temperatura)+ " ºC");
        
        if (this.temperatura > 74.8) {
            
        }
    }
    
//    private void 
}